/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Compilador.Lexico.Automatos;

/**
 *
 * @author Rafa
 */
public class EstadoAutomatoDesempilha extends EstadoAutomato {

    private char simboloEmpilhado;
    private Automato automato;

    public EstadoAutomatoDesempilha(boolean isEstadoFinal, boolean isLoop, String nome,char simboloEmpilhado, Automato automato) {
        super(isEstadoFinal, isLoop,nome);
        this.simboloEmpilhado = simboloEmpilhado;
        this.automato = automato;
    }
    
    

    @Override
    public EstadoAutomato getEstado(char simbolo) {
        if (transicoesAutomatos.containsKey(String.valueOf(simbolo))) {
            if (simbolo == this.simboloEmpilhado) {
                if (automato.getPilhaIgual() == 0) {
                    return null;
                } else {
                    automato.desempilhaN();
                    return transicoesAutomatos.get(String.valueOf(simbolo));
                }
            } else if (automato.getPilhaIgual() > 0) {
                return null;
            } else {
                return transicoesAutomatos.get(String.valueOf(simbolo));
            }


        } else if (this.isLoop) {
            return this;
        } else {
            return estadoDefault;
        }
    }
}
